// axios 二次封装，使用响应和请求拦截器
import axios from 'axios'
import { ElMessage } from 'element-plus'
// 引入用户相关的仓库
import useUserStore from '@/store/modules/user'
// 一，使用create方法，创建axios实例（配置：基础路径，超时时间）
let request = axios.create({
  // 基础路径 会携带/api
  baseURL: import.meta.env.VITE_APP_BASE_API,
  // 超时时间
  timeout: 20000
})
// 二，请求拦截器
request.interceptors.request.use(config => {
  // 获取用户相关的小仓库，获取仓库内部的token，登录成功后携带给服务器
  const userStore = useUserStore()
  if(userStore.token) {
    config.headers.token = userStore.token
  }
  // config 配置对象，headers属性请求头，给服务器端携带公共参数
  //返回配置对象
  return config
})
// 三，响应拦截器
request.interceptors.response.use((response) => {
  // 成功回调
  // 简化数据
  return response.data
}, (error) => {
  // 失败回调：处理http网络错误
  // 定义变量：存储网络错误信息
  let message = ''
  let status = error.response.status
  switch (status) {
    case 401:
      message = '未授权，请登录（token过期）'
      break
    case 403:
      message = '无权访问'
      break
    case 404:
      message = '请求地址出错'
      break
    case 500:
      message = '服务器内部错误'
      break
    default:
      message = '网络出现问题'
      break
  }
  ElMessage({
    type: 'error',
    message: message
  })
  return Promise.reject(error)
})

// 对外暴露
export default request